// 创建新迁移文件的脚本
const fs = require('fs')
const path = require('path')

function createMigration(description) {
  if (!description) {
    console.error('❌ 请提供迁移描述')
    console.log('用法: node create-migration.js "add_new_field"')
    process.exit(1)
  }
  
  // 生成时间戳版本号
  const now = new Date()
  const year = now.getFullYear()
  const month = String(now.getMonth() + 1).padStart(2, '0')
  const day = String(now.getDate()).padStart(2, '0')
  const hour = String(now.getHours()).padStart(2, '0')
  const minute = String(now.getMinutes()).padStart(2, '0')
  const second = String(now.getSeconds()).padStart(2, '0')
  
  const version = `${year}${month}${day}_${hour}${minute}${second}`
  const filename = `${version}_${description.replace(/\s+/g, '_').toLowerCase()}.sql`
  
  // 迁移文件模板
  const template = `-- 迁移版本: ${version}
-- 描述: ${description}
-- 创建时间: ${now.toLocaleString('zh-CN')}
-- 影响: [请描述此迁移的影响范围]

-- ==========================================
-- 向前迁移 (UP)
-- ==========================================

-- 记录迁移开始
INSERT INTO schema_migrations (version, description) 
VALUES ('${version}', '${description}');

-- TODO: 在此添加你的迁移SQL
-- 例如：
-- ALTER TABLE tasks ADD COLUMN new_field TEXT;
-- CREATE INDEX idx_tasks_new_field ON tasks(new_field);

-- ==========================================
-- 验证迁移
-- ==========================================

-- TODO: 添加验证SQL确保迁移成功
-- 例如：
-- DO $$
-- BEGIN
--     IF NOT EXISTS (
--         SELECT 1 FROM information_schema.columns 
--         WHERE table_name = 'tasks' AND column_name = 'new_field'
--     ) THEN
--         RAISE EXCEPTION '字段添加失败';
--     END IF;
--     
--     RAISE NOTICE '✅ 迁移验证通过';
-- END $$;

-- ==========================================
-- 向后迁移 (DOWN) - 仅用于紧急回滚
-- ==========================================

/*
-- 回滚步骤（谨慎使用）：

-- TODO: 添加回滚SQL
-- 例如：
-- DROP INDEX IF EXISTS idx_tasks_new_field;
-- ALTER TABLE tasks DROP COLUMN IF EXISTS new_field;

-- 删除迁移记录
DELETE FROM schema_migrations WHERE version = '${version}';
*/`

  // 创建迁移文件
  const migrationsDir = path.join(__dirname, '../database/migrations')
  
  // 确保目录存在
  if (!fs.existsSync(migrationsDir)) {
    fs.mkdirSync(migrationsDir, { recursive: true })
  }
  
  const filepath = path.join(migrationsDir, filename)
  
  if (fs.existsSync(filepath)) {
    console.error(`❌ 迁移文件已存在: ${filename}`)
    process.exit(1)
  }
  
  fs.writeFileSync(filepath, template, 'utf8')
  
  console.log(`✅ 迁移文件已创建: ${filename}`)
  console.log(`📁 路径: ${filepath}`)
  console.log(`\n📝 下一步:`)
  console.log(`1. 编辑迁移文件，添加你的SQL语句`)
  console.log(`2. 添加验证SQL确保迁移成功`)
  console.log(`3. 运行迁移: node scripts/run-migrations.js`)
}

// 如果直接运行此脚本
if (require.main === module) {
  const description = process.argv[2]
  createMigration(description)
}

module.exports = { createMigration }
